会话接入功能介绍
会话接入的目的是帮助开发者的组件对接三方的账户系统,尤其是当开发者的组件寄生于使用方的环境(如APP)时,使用其会话作为账户识别。
举例来说,一个完整的会话接入的过程是这样的:
- 开发者A开发组件a,并上线
- 券商B购买组件a,并生成实例inst_a
- 券商B将inst_a集成到自己的app中,并希望使用自己的账户系统来使用组件a(实例inst_a)的功能
- 开发者A发起会话接入登记,将access_secret登记在light平台
- 券商B按照会话接入的流程做简单接口适配(适配的流程见后文)
- 开发者A在组件a上引入LightSDK,使用LightSDK获取会话信息
至此,可以完成一个组件的会话接入过程,下面为大家详细说明一下会话接入方案的设计原理和使用方式。
原理

生成并跳转免登URL
已经登录的应用通过账户提供方的后端服务接口,传入需要打开的实例id及当前用户的open_id(也可从会话中获取),由接入方服务组织请求参数生成免登url。
应用跳转到服务端生成的免登url,携带用户信息和签名串。
Light平台校验签名并截取用户信息置换为access_token
平台根据请求参数找出登记在平台的access_secret,对签名做校验,校验通过后将请求跳转到对应的实例url并携带access_token返回。
实例通过lightSDK获取用户信息
已经登录的实例可以使用LightSDK获取用户的信息。
免登URL接口说明
免登URL由应用的开发方根据当前用户的open_id生成,并由客户端应用请求到light服务器( 接口地址 ),light服务器会校验签名的有效性,并根据参数中的inst_id(实例ID)将请求302到真实的实例url上同时携带access_token返回。
免登url在生成后5分钟(可配置)内使用有效。
一次登录的有效期时间可在平台中配置。
接口地址
https://api.lightyy.com/account/v1/auth_check
参数列表
| 参数 | 是否必须 | 参数类型 | 限制长度 | 参数说明 |
|---|---|---|---|---|
| open_id | Y | String | 32 | Open_id |
| timestamp | Y | Long | 20 | 时间戳 |
| nick_name | Y | String | 100 | 昵称 |
| sign | Y | String | 32 | 签名 |
| inst_id | Y | String | 32 | 实例ID |
| province | N | String | 20 | 省份: 如Zhejiang |
| city | N | String | 20 | 城市如Hangzhou |
| sex | N | String | 1 | 性别0-女 1-男 |
| avatar | N | String | 100 | 头像地址url |
| N | String | 20 | QQ号码 | |
| mobile_tel | N | String | 255 | 手机号 |
签名规则
md5签名的原理如下: 将所有的参数值与access_secret,user_agent按参数名升序进行排列,其中access_secret由账户提供方持有并登记在light平台,应严格保密;user_agent从客户端请求的请求头中读取(目的是保证请求在限制的客户端中使用),access_secret,user_agent都不能出现在请求参数中。
Md5(value1+value2+...access_secret...+...user_agent...+valueN)access_secret在签名中的顺序取决于他在所有参数名中的顺序。user_agent在签名中的顺序也取决于他在所有参数名中的顺序。
例子:
参与签名的参数列表
{ nick_name: ‘testuser-0’,
avatar: ‘htps://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png’,
inst_id: ‘2760’,
open_id: ‘0’,
access_secret: ‘7cdf989959d357b75cc52a449a2bd79a’,
user_agent: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36’,
timestamp: 1478825018946 }按照参数名升序后
[“access_secret”,”avatar”,”inst_id”,”nick_name”,”open_id”,”timestamp”,”user_agent”]
最终待签名字符串
7cdf989959d357b75cc52a449a2bd79ahtps://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png2760testuser-001478825018946Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36最终生成的免签url地址
htps://api.lightyy.com/account/v1/auth_check?nick_name=testuser-0&avatar=htps://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png&inst_id=2760&open_id=0×tamp=1478825018946&sign=8fc2a2fdb69505896ceb5bcb93edc1bd
注意:
签名验证时,必须遍历request请求中的所有参数,进行签名验证。开发者在验证请求时,务必对所有参数进行遍历,全部加入签名验证数据中。
关于access_secret
access_secret由账户的提供方持有并登记到light平台。
用户信息获取SDK使用说明
使用会话接入功能的组件可以借助LightSDK来处理用户会话信息
引入LightSDK
获取用户信息
LightSDK.account.userInfo(function (userInfo) {console.log(userInfo);// userInfo.open_id:用户在三方系统的业务id,全局可重复,以账户系统划分则不可重复});
会话接入服务端demo
下载地址:会话接入服务端demo
此demo基于nodejs,请先安装node环境。